///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: laperro.h
//* 功能说明: 错误检查相关函数
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 系统日志
//* QQ:	2085827949
//**********************************************************************/
#ifndef __LAPERRO_H__
#define __LAPERRO_H__

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>


// #define LOG(format, ...)     fprintf(stdout, format, ##__VA_ARGS__)
// #define LOG(format, args...) fprintf(stdout, format, ##args)


extern char LAP_ERR_BUFF[100];	// 错误输出缓冲区
extern FILE*  LAP_ERR_OUT_FD;   // 错误输出 文件

// 设置错误信息重定向宏
#define LAP_ErrOutSet(file) \
({\
    int ret = -1;\
    if(file==NULL) ret = Lap_setErrRedirect("/dev/stdout");\
    else ret = Lap_setErrRedirect(file);\
    ret;\
})



/*********************************************************************************
** 函数名称: LAP_NullErrReurn
** 功能描述: 判断返回值是否小于0,并打印调试信息
** 输入参数: ret:比较值			sucStr: ret>=0要打印的信息			errStr：ret<0要打印的信息        
** 输出参数: None.
** 返回参数: None.
**********************************************************************************/
#define LAP_NullErrRet(point,ret,fromat,arg...) \
{\
    if(point==NULL&&LAP_ERR_OUT_FD!=NULL){\
        fprintf(LAP_ERR_OUT_FD,fromat" [%d]:%s\r\n",##arg,errno,strerror(errno));\
        return ret;\
    }\
}


/*********************************************************************************
** 函数名称: LAP_NegErrRet
** 功能描述: 判断返回值是否小于0,并打印调试信息
** 输入参数: ret:比较值			sucStr: ret>=0要打印的信息			errStr：ret<0要打印的信息        
** 输出参数: None.
** 返回参数: None.
**********************************************************************************/
#define LAP_NegErrRet(fd,ret,fromat,arg...) \
{\
    if(fd<0&&LAP_ERR_OUT_FD!=NULL){\
        fprintf(LAP_ERR_OUT_FD,fromat" [%d]:%s\r\n",##arg,errno,strerror(errno));\
        return ret;\
    }\
}

#define LAP_NegErrExit(fd,ret,fromat,arg...) \
{\
    if(fd<0&&LAP_ERR_OUT_FD!=NULL){\
        fprintf(LAP_ERR_OUT_FD,fromat" [%d]:%s\r\n",##arg,errno,strerror(errno));\
        exit(ret);\
    }\
}


#include <stdio.h>
#include <unistd.h>
FILE* Lap_openLog(const char* path);            // 打开系统日志
void Lap_sysLog(FILE* fd,const char *fmt,...);  // 打印系统日志
void Lap_closeLog(FILE* file);                  // 关闭系统日志

#define LAP_NegErrLog(file,ret,fromat,arg...) \
{\
    if(ret < 0 &&file!=NULL){\
       Lap_sysLog(file,fromat,##arg);\
    }\
}

#define LAP_NegLog(file,ret,sucMsg,errMsg,arg...) \
{\
    if(ret<0) Lap_sysLog(file,errMsg,##arg);\
    else Lap_sysLog(file,sucMsg,##arg);\
}


#if 1
// 遗弃版本
    int Lap_setErrRedirect(char * file);
    void lap_errneg(int ret,const char *sucStr,const char * errStr);
    void lap_errnegfun(int ret,void(*fun(void*)),void *argc);
//打印错误信息 并返回
    #define ERR_Pintf(str,ret) \
    {\
    perror(str);\
    return ret;\
    }

    #define isNull(p,str,ret) \
    if(p==NULL)\
    ERR_Pintf(str,ret)

    #define isSigned(fd,str,ret) \
    if(fd<0)\
    ERR_Pintf(str,ret)

#endif

#endif







																						 
